필드(Fields)
✒️ 2025-05-16 13:48 내용 수정
참고 자료 : 위키원 필드
객체의 속성을 표현하고 데이터를 저장하는 클래스의 멤버 변수
-
클래스 내부의 생성자와 메서드 밖에서 정의되고 사용된다.
- 생성자와 메서드 안에서 선언된 것은 로컬 변수이고, 필드가 아니다.
-
초기값을 가질 수 있다.
-
객체를 생성하면 그 객체의 필드를 사용할 수 있고, 생성된 객체를 더 이상 참조하지 않으면 가비지 컬렉터(Garbage Collector)에 의해 제거된다.
- 객체(인스턴스) 마다 독립적인 필드 값을 가진다.
- 객체이름.필드명으로 접근할 수 있다.
- 접근 제한자(제어자)에 따라 접근이 제한된다.
-
해당 클래스 내의 모든 메서드에 접근할 수 있다.
- 메서드 안에서 필드 변수를 사용할 때 메서드 내의 지역변수와 필드 변수의 이름이 같으면 지역 변수를 우선순위로 한다.
- 때문에 필드 변수를 메서드 내에서 사용하고 싶다면 this. 를 붙여야 사용할 수 있다.
접근제한자 변수이름 = 초기값;
접근제한자 변수이름;
변수의 종류
class Exam {
static int exam1; // 클래스 변수
String exam2; // 인스턴스 변수
void method() {
int exam3; // 지역 변수
}
}
1. 클래스 변수(static variable)
- 참조용 클래스 안에서 만들어지고, static 키워드를 가지는 변수 (제어자#2. 기타 제어자 참고)
- 클래스이름.변수이름 으로 사용한다.
- 클래스가 호출될 때 생성되고, 프로그램이 끝나면 소멸된다.(Resources/Java/메모리 구조#1. 메서드 영역(Method area))
- 클래스 자체에 속하기 때문에 모든 객체(인스턴스)가 공유한다.(인스턴스 생성 없이 바로 사용 가능)
- 초기화하지 않아도 기본값이 자동으로 초기화된다.
- 다른 값으로 초기화할 때는 명시적 초기화를 하거나, 초기화 블록(Initialization block)#2. 클래스 초기화 블록을 사용해야 한다.
2. 인스턴스 변수(instance variable)
- 참조용 클래스 안에서 만들어지고, 클래스 영역에 위치하지만 static 키워드가 없는 변수
- 인스턴스이름.변수이름 으로 사용한다. (객체이름.필드명 과 같다.)
- 인스턴스마다 고유 값을 가질 때 사용한다.
- 객체가 생성되면 만들어지고, 그 객체를 참조하는 변수가 없으면 소멸한다.(Resources/Java/메모리 구조#3. 스택 영역(Stack area))
- 초기화하지 않아도 기본값이 자동으로 초기화된다.
- 다른 값으로 초기화할 때는 다양한 방법으로 초기화할 수 있다. (초기화 블록(Initialization block)#필드의 초기화 참고)
3. 지역 변수(local variable)
- 메서드, 생성자, 초기화 블록 내에 위치한 변수
- 변수이름 으로 사용한다.
- 사용하기 전에 반드시 초기화해야 한다.
- 메서드가 호출될 때 만들어지고, 메서드가 끝나면 소멸한다. (Resources/Java/메모리 구조#3. 스택 영역(Stack area))
4. 매개변수(parameter)
- 메서드에 값을 넘겨주는 변수
- 메서드가 호출될 때 만들어지고, 메서드가 끝나면 소멸한다.(Resources/Java/메모리 구조#3. 스택 영역(Stack area))
- 만약 메서드의 지역 변수를 매개 변수로 받는 다른 메서드의 호출이 끝났는데, 지역 변수를 다시 호출한다면 함수 호출 전의 값이 나온다.(매개변수는 이미 메서드 호출 종료 시점에서 제거)
String str = "String area test";
// String이란 클래스는 메서드 영역
// str이란 참조 변수는 스택 영역
// "String area test" 는 힙 여역
| 변수 | 생성 시기 | 소멸 시기 | 저장 메모리 |
|---|---|---|---|
| 클래스 변수 | 클래스가 메모리에 올라갈 때 | 프로그램 종료 시 | 메서드(Method) 영역 |
| 인스턴스 변수 | 인스턴스 생성 시 | 인스턴스 소멸 시 | 힙(Heap) 영역 - 객체 스택(Stack) 영역 - 참조변수 |
| 지역 변수 | 블록 내에서 변수의 선언문 실행 시 | 블록 벗어날 때 | 스택(Stack) 영역 |
| 매개 변수 | 메서드 호출 시 | 메서드 종료 시 | 스택(Stack)영역 |